﻿﻿﻿﻿using System.Windows;
using CommunityToolkit.Mvvm.Input;
using NavigateExample.Services.Navigation;
using NavigateExample.Views;

namespace NavigateExample.ViewModels
{
    public partial class LoginViewModel : ViewModelBase, INavigationAware
    {
        private readonly INavigationService navigationService;

        [ObservableProperty]
        string? userName = "Sean";

        public LoginViewModel(INavigationService navigationService)
        {
            this.navigationService = navigationService;
        }

        [RelayCommand]
        void Login()
        {
            // 使用新的导航方法和参数传递（导航到HomeView）
            var parameters = new NavigationParameters();
            parameters.Add("UserName", UserName ?? string.Empty);
            parameters.Add("LoginTime", DateTime.Now);
            //回调
            navigationService.Navigate<HomeView>(parameters, result =>
            {
                if (result.Success)
                {
                    // 导航成功的处理逻辑
                }
                else
                {
                    // 导航失败的处理逻辑
                }
            });
        }
        
        //INavigationAware的方法都是在Navigate<T>内部被调用
        #region INavigationAware 
        //导航到此页面时候被调用
        public void OnNavigatedTo(NavigationParameters parameters)
        {
            // 当导航到此页面时调用
            // 可以在这里处理传入的参数
            if (parameters.ContainsKey("Message"))
            {
                var message = parameters.GetValue<string>("Message");
                // 处理消息
            }
        }
        public void OnNavigatedFrom(NavigationParameters parameters)
        {
            // 当从此页面导航离开时调用
        }

        public bool CanNavigateFrom(NavigationParameters parameters)
        {
            // 检查是否可以从此页面导航离开
            // 例如，可以检查是否有未保存的数据
            return true; // 登录页面通常可以自由离开
        }
        
        #endregion
    }
}
